package com.mazaiting.generator.service;

import com.mazaiting.common.core.ex.exceptions.EmptyObjectException;
import com.mazaiting.generator.domain.entity.FieldTypeEntity;
import com.mazaiting.generator.domain.form.FieldTypeForm;
import com.mazaiting.generator.domain.info.FieldTypeInfo;
import com.mazaiting.generator.domain.query.FieldTypeQuery;
import com.mazaiting.generator.domain.vo.FieldTypeVO;
import com.mazaiting.mybatisplus.domain.vo.BasePageVO;
import org.springframework.transaction.annotation.Transactional;

import java.util.Map;
import java.util.Set;

/**
 * 字段类型管理
 */
public interface IFieldTypeService extends com.baomidou.mybatisplus.extension.service.IService<FieldTypeEntity> {

    /**
     * 查询字段分页列表
     * @param query 查询条件
     * @return 分页数据
     */
    BasePageVO<FieldTypeVO> page(FieldTypeQuery query);

    /**
     * 获取字段类型列表
     * @return 字段类型列表
     */
    Set<String> getListAll();

    /**
     * 获取字段类型映射关系
     * @return map 数据
     */
    Map<String, FieldTypeInfo> getMap();

    /**
     * 更新字段类型
     * @param fieldTypeForm 字段信息
     * @return true: 更新成功; false: 更新失败
     */
    boolean update(FieldTypeForm fieldTypeForm) throws EmptyObjectException;

    /**
     * 新增数据
     * @param fieldTypeForm 表单数据
     * @return true: 新增成功; false: 新增失败
     */
    @Transactional(rollbackFor = Exception.class)
    boolean save(FieldTypeForm fieldTypeForm);

    /**
     * 删除数据
     * @param ids ID 列表
     * @return true: 删除成功; false: 删除失败
     */
    @Transactional(rollbackFor = Exception.class)
    boolean deleteByIds(String ids);

    /**
     * 根据 ID 获取信息
     * @param id ID
     * @return 信息
     */
    FieldTypeVO getInfoById(Long id);
}